今天應該不會再作弊了吧
就決定寫短一點了
前三篇講了如何用官方提供的 Neo4j.Driver
完成與 Neo4j 的連接與資料傳遞
今天要來講講另一個與 Neo4j 連接的套件
同時在 NuGet 上,下載數還比 Neo4j.Driver
多的套件
也就是 Neo4jClient
內容警告:
本篇文章內容,小弟我之前沒用過,是邊寫文章邊研究的
所以說如果寫得很像筆記,或是哪裡怪怪的,請多包含
好的一樣先從基本的連線開始吧
Code 如下,記得要先去 NuGet 裝 Neo4jClient
var client = new GraphClient(new Uri("http://localhost:7474"), "neo4j", "123456");
await client.ConnectAsync();
var node = await client.Cypher
.Match("(n:SQL)")
.Return(n => n.As<Sql>())
.ResultsAsync;
var nodeList = node.ToList();
首先前兩行就是基本連線,應該不用多說
最主要在第三行開始
var node = await client.Cypher
.Match("(n:SQL)")
.Return(n => n.As<Sql>())
.ResultsAsync;
有玩過 LINQ 的朋友,對於這個結構一定不陌生
Neo4jClient
最屌的就是他將 Cypher 用跟 LINQ 類似的方式呈現
至少我目前看起來是這樣覺得
string sql = $"MATCH (n:SQL) RETURN n";
前幾篇還在用 string
寫 Cypher
Neo4jClient
直接提供了看起來比較科學的玩法
用法實際上跟寫 Cypher 的順序一樣
更多的相關用法可以參考這裡,這邊就不多做贅述
再來是這個部分
.Return(n => n.As<Sql>())
這邊根據大家的直覺,以及前幾篇的內容
直接想到是轉換格式應該是沒有問題的
public class Sql
{
[JsonProperty(PropertyName = "Name")]
public string Name { get; set; }
}
這邊我的 class Sql
寫成這樣
[JsonProperty(PropertyName = "Name")]
其中這個 Attribute
是用來 mapping Property
用的
如果你變數宣告的名稱跟你的 Property
一樣
那這行 Attribute
可以不用加,建議還是都加啦
Neo4j.Driver
的差異在資料查詢上看起來確實是方便許多
畢竟用 string
寫 Cypher 真的有點刺激
不過,話雖然是這麼說
但我查到現在還是沒找到可以回傳完整 Node
或 Relationship
資料的方法
其實也才查了 2 小時
目前看到的 Label
、Property
一定要分開來讀
這部份對於我來說有那麼點不方便
如果之後有查到方法再來補充吧 |>
另外,寫入資料官網的語法長成這樣
var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
.Create("(user:User {newUser})")
.WithParam("newUser", newUser)
.ExecuteWithoutResults();
可是我怎麼測都測不過,莫名其妙
漂亮,今天看起來是不用作弊了
原本 Neo4j.Driver
是預計要寫 4 篇的
可是發現篇幅好像不太夠,才硬塞了這篇進來
計畫果然充滿變化呢
不過按照計畫,最後還有 4 篇沒東西寫,有點危險ww
下篇 Neo4j 與 前端技術
究竟鐵人賽能不能完賽呢,讓我們繼續看下去
排版好看的版本同步更新在我的 HackMD